package com.junxian.demo02.service;

import com.junxian.demo02.dao.User;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
 * @Author: SunJunxian
 * @Date: 2018/12/10
 * @Description: 编写一个继承自JpaRepository的接口就能完成数据访问 ,增加缓存配置注解(@CacheConfig , @Cacheable )
 * @CacheConfig： 主要用于配置该类中会用到的一些共用的缓存配置。
 */

@CacheConfig(cacheNames = "users")
public interface UserService extends JpaRepository<User , Long> {

    /**
     *通过名字来查找数据
     *
     * @param name
     * @return Resule</User>
     * @Cacheable： 配置了findByName函数的返回值将被加入缓存。同时在查询时，会先从缓存中获取，若不存在才再发起对数据库的访问。
     * 通过解析方法名创建查询（所以方法名不能写错）
     */

    @Cacheable(key = "#p0")
    User findByName(String name);

    /**
     * 功能描述: 
     * @param:
     * @return:
     * @CachePut 来让数据更新操作同步到缓存中
     */
    @CachePut(key = "#p0.name")
    User save(User user);
}
